import cartApi from '../../api/cart'
export default{
    namespaced: true,
    state: {
        items:[],
        checkoutStatus:null
    },
    mutations:{
        // 接收商品id，完成添加商品到购物车
        pushProductToCart(state,{id}){
            // 添加一条商品购买记录
            state.items.push({
                id,
                quantity:1
            });
        },
        // 接收商品id，完成购物车商品数量+1
        incrementItemQuantity(state,{id}){
             // 根据 id，找出对应的 item 记录
            const cartItem = state.items.find(item =>item.id ===id);
            // 购买数量+1
            cartItem.quantity++;
        },
        //全量更新购物车商品
        setCartItems(state,{items}){
            state.items = items
        },
        //更新购物车购买状态
        setCheckoutStatus(state,status){
           state.checkoutStatus = status
        }
    },
    actions: {
        addProductToCart({state,commit},product){
              // 重制购物车状态
            commit("setCheckoutStatus",null);
            if(product.inventory <= 0){
                // 如果商品库存没有了则不用继续执行了，直接返回
                return;
            }
            //查找购物车商品
            const cartItem = state.items.find(item => item.id === product.id);
            // 判断购物车里没有商品，则执行添加商品，否则执行添加数量
            if(!cartItem){
            commit("pushProductToCart",{id:product.id})
            }else{
                commit("incrementItemQuantity",cartItem);
            }
             // 执行商品的库存减法，确保商品不会超卖
            commit(
                "product/decrementProductInventory",
                {id:product.id},
                {root:true}
                )
        },
        async checkout({state,commit},products){
            //拷贝新对象并缓存 state 的 items 数据
            const saveCartItems = [...state.items];
            console.log("save "+saveCartItems);
            commit('setCheckoutStatus',null);
            commit('setCartItems',{items:[]});
            const cartResult = await cartApi.buyProducts(products);
            console.log(cartResult)
            console.log(products)
            if(cartResult.success){
                commit('setCheckoutStatus',"successful");
                console.log("success")
            }else{
                commit('setCheckoutStatus',"failed")
                commit('setCartItems',{items:saveCartItems})
                console.log("failed")
            }
            
        }
    },
    getters: {
        cartProducts:(state,getters,rootState) =>{
            return state.items.map(({id,quantity})=>{
                const product = rootState.product.all.find(p => p.id === id);
                return {
                    id,
                    title:product.title,
                    price:product.price,
                    quantity
                }
            });
        },
        cartTotalPrice:(state,getters) =>{
               var total = 0;
                 getters.cartProducts.forEach((product) =>{
                        total += product.price*product.quantity
                  })
                  return total;
        }
    }
}